package net.lucamasini.fantacalcio.gwt.client.presenter;

import static net.lucamasini.fantacalcio.gwt.client.Fantacalcio.getEventBus;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import net.lucamasini.fantacalcio.gwt.client.event.CreaPronosticoEvent;
import net.lucamasini.fantacalcio.gwt.client.event.CreaPronosticoEventHandler;
import net.lucamasini.fantacalcio.gwt.client.view.CreaPronosticoView;
import net.lucamasini.fantacalcio.server.model.Giornata;
import net.lucamasini.fantacalcio.server.model.Partita;
import net.lucamasini.fantacalcio.server.model.Pronostico;

import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.user.client.ui.HasWidgets;

public class CreaPronosticoPresenter implements Presenter {

	private final CreaPronosticoView view;

	private final String username = "luca.masini@gmail.com";
	
    final private Giornata giornata = new Giornata();
    {
    	giornata.setDataFinePronostici(new Date());
    	giornata.setDataInizioPronostici(new Date());
    	giornata.setDescrizione("Prima giornata di Serie A");
    }

	final private Partita[] partite = {
			new Partita.PartitaBuilder(giornata).withCasa("Fiorentina").withTrasferta("Napoli").withPronostico(username, new Pronostico()).build(),
			new Partita.PartitaBuilder(giornata).withCasa("Bari").withTrasferta("*******").withPronostico(username, new Pronostico()).build(),
			new Partita.PartitaBuilder(giornata).withCasa("Pavia").withTrasferta("Paganese").withPronostico(username, new Pronostico()).build(),
			new Partita.PartitaBuilder(giornata).withCasa("Ternana").withTrasferta("Cosenza").withPronostico(username, new Pronostico()).build(),
			new Partita.PartitaBuilder(giornata).withCasa("Atletico Roma").withTrasferta("Taranto").withPronostico(username, new Pronostico()).build()
	};

	public CreaPronosticoPresenter(CreaPronosticoView view) {
		
		this.view = view;
		this.view.setPresenter(this);
		
		view.setUsername(username);
		
        List<Partita> listValues = new ArrayList<Partita>();
        for(int i=0;i<partite.length;i++) {
			listValues.add(partite[i]);
        }
		view.partite().setRowData(0, listValues);
		
		view.descrizioneGiornata().setText(giornata.getDescrizione());
		view.dataGiornata().setText(DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT).format(giornata.getDataFinePronostici()));
		
		bindEvents();
	}
	
	@Override
	public void go(HasWidgets container) {
		container.add(view.asWidget());
	}
	
    private void bindEvents() {
        getEventBus().addHandler(CreaPronosticoEvent.TYPE, new CreaPronosticoEventHandler() {
            @Override
            public void onCreaPronostico(CreaPronosticoEvent
                    event) {
                for(int i=0;i<partite.length;i++) {
                	Pronostico pronostico = partite[i].getPronostici().get(username);
					GWT.log("Pronostico: "+pronostico.getCasa()+" - "+pronostico.getTrasferta());
                }
            }
        });
    }
}
